package e164

type E164 interface {
	// 判定输入的号码是否是手机号码
	IsMobile(tel string) bool

	// 依据本地的号码规则规范，从输入的号码中进行e164判定以及本地化号码判定。
	// 如果实现者属于专属国家的，cname将不产生作用
	// 查找模式
	// lookup 为假，使用各种方法查找原始号码中的准确号码, 并返回该号码
	// 精确模式
	// lookup 为真, 仅对原始号码做解析，如果不符合e164规范的，返回错误
	Search(oriTel string, lookup bool) (string, error)
}

var drivers = map[string]E164{}

func Register(name string, e E164) {
	drivers[name] = e
}

func GetDriver(name string) (E164, bool) {
	e, ok := drivers[name]
	return e, ok
}
